﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework;
using FuncWorks.XNA.XTiled;
using Microsoft.Xna.Framework.Input;
using fess.Maps;
using fess.Graphics;

namespace fess.Screens
{
  class Splash : IScreen
  {
    protected SpriteBatch spriteBatch;
    protected FessGame game;
    TimeSpan start = TimeSpan.MinValue;
    protected SpriteFont bigFont;

    protected double duration = 20;
    protected bool skipOnAnyKey = true;

    public Splash(FessGame game)
    {
      this.game = game;
      bigFont = game.Content.Load<SpriteFont>("Big");
      spriteBatch = new SpriteBatch(game.GraphicsDevice);
    }

    public virtual void Draw(GameTime gameTime)
    {
      game.GraphicsDevice.Clear(Color.Black);
      spriteBatch.Begin();

      var t = (gameTime.TotalGameTime - start).TotalSeconds;
 
      spriteBatch.DrawString(bigFont, "\"Фесс в свою очередь принялся рассказывать.\nСамую малость приукрасив, он поведал Атлике\nо беспокойных кладбищах, с лёгкостью добившись\nтребуемого действия.\nДевушка охала и ахала, прикрывая глаза ладонью.\"", 
        new Vector2(100, 100), Color.FromNonPremultiplied(255, 255, 255, (int)(Math.Min(255, Math.Max(0, t * 255 / 5.0)))));

      spriteBatch.DrawString(bigFont, "– Ник Перумов, \"Рождение Мага\"",
        new Vector2(250, 250), Color.FromNonPremultiplied(255, 255, 255, (int)(Math.Min(255, Math.Max(0, (t - 5) * 255 / 5.0)))));

      spriteBatch.DrawString(bigFont, "\"Взросление Мага\". Для конкурса в /гд/",
        new Vector2(100, 350), Color.FromNonPremultiplied(255, 255, 255, (int)(Math.Min(255, Math.Max(0, (t - 10) * 255 / 5.0)))));

      spriteBatch.End();
    }

    public bool Update(GameTime gameTime)
    {
      if (start == TimeSpan.MinValue)
        start = gameTime.TotalGameTime;

      KeyboardState keys = Keyboard.GetState();

      var t = (gameTime.TotalGameTime - start).TotalSeconds;

      if (t > duration || skipOnAnyKey && Misc.IsAnyKeyJustPressed() || Misc.IsKeyJustPressed(Keys.Escape))
      {
        EndScreen(gameTime);
        return false;
      }

      return true;
    }

    protected virtual void EndScreen(GameTime gameTime)
    {
      game.screens.Add(new Help(game, false));
    }
  }

  class Help : Splash
  {
    bool inGame;

    public Help(FessGame game, bool inGame)
      : base(game)
    {
      this.inGame = inGame;
      duration = 30;
    }

    protected override void EndScreen(GameTime gameTime)
    {
      if (!inGame)
        game.NewGame();
    }

    public override void Draw(GameTime gameTime)
    {
      game.GraphicsDevice.Clear(Color.Black);
      spriteBatch.Begin();

      spriteBatch.DrawString(bigFont, @"Помощь начинающему некроманту:

[W], [A], [S], [D] - хождение. [E] - взаимодействие с окружением.

Левый клик - огненная стрела в направлении клика. Отнимает немного
             Силы Духа, наносит небольшие повреждения одной цели.

Правый клик - огненный шар в направлении клика. Также известен в Терре
             как ""фаербол"". При попадании взрывается, нанося урон
             всем вокруг. Взрыв порождает несколько огненных стрел. 
             Использовать с осторожностью!

Стрелки - перемещение камеры.

[Esc] - выход.


                         Нажмите любую клавишу для продолжения",
        new Vector2(50, 20), Color.White);

      spriteBatch.End();
    }
  }

  class GameOver : Splash
  {
    public GameOver(FessGame game)
      : base(game)
    {
      duration = 5;
      skipOnAnyKey = false;
    }

    protected override void EndScreen(GameTime gameTime)
    {
    }

    public override void Draw(GameTime gameTime)
    {
      game.GraphicsDevice.Clear(Color.Black);
      spriteBatch.Begin();

      spriteBatch.DrawString(bigFont, @"Фесс пал в бою. Игра окончена.",
        new Vector2(100, 250), Color.White);

      spriteBatch.End();
    }
  }

  class Victory : Splash
  {
    public Victory(FessGame game)
      : base(game)
    {
      duration = 10;
      skipOnAnyKey = false;
    }

    protected override void EndScreen(GameTime gameTime)
    {
    }

    public override void Draw(GameTime gameTime)
    {
      game.GraphicsDevice.Clear(Color.Black);
      spriteBatch.Begin();

      spriteBatch.DrawString(bigFont, @"Поздравляю! Под Вашим руководством Фесс прошёл
летнюю практику (и остался в живых!).
Теперь он полностью готов к дальнейшим приключениям.",
        new Vector2(100, 250), Color.White);

      spriteBatch.End();
    }
  }
}
